# -*- codeing = utf-8 -*-
# @Time : 2021/2/26 19:45
# @Atuthor: 朱朱
# @File: 123多态的使用.py
# @Software: PyCharm
""
"""
多态总结
定义：多态是一种使用对象的方式，子类重写父类方法，
    调用不同子类对象的相同父类方法，可以产生不同的执行结果
好处：调用灵活，有了多态，更容易编写出通用的代码，
    做出通用的编程，以适应需求的不断变化！
实现步骤：
    定义父类，并提供公共方法
    定义子类，并重写父类方法
    传递子类对象给调用者，可以看到不同子类执行效果不同

"""

class Dog(object):
    def work(self):
        return '狗正在工作'
        #  这里不要用print打印,要不然调用时会出现none类型


class PoliceDog(Dog):
    def work(self):
        return '警犬正在攻击敌人'


class BlindDog(Dog):
    def work(self):
        return '导盲犬正在领路'


class DrugDog(Dog):
    def work(self):
        return '缉毒犬正在搜毒'


class Person(object):
    def __init__(self, name):
        self.name = name
    def work_with_dog(self,dog):
        print(f'{self.name}和{dog.work()}')

dog = Dog()
pd = PoliceDog()
bd = BlindDog()
dd = DrugDog()


p = Person('jack')
p.work_with_dog(dog)
p.work_with_dog(pd)
p.work_with_dog(bd)
p.work_with_dog(dd)